package Management;


import java.util.ArrayList;
import java.util.List;

import bean.dao.*;
import Entities.*;
import paquetes.negocioVO.*;


public class ManagementCliente {

	private static ManagementCliente instancia;
	
	public static ManagementCliente getInstancia(){
		if(instancia == null)
			instancia = new ManagementCliente();
		return instancia;
	}
	
	public ClienteVO clienteEntitieAVO(Cliente cliente) {
		
		if (cliente.getClass().getName().equals("ClienteEventual")){
			
			ClienteEventualVO clienteVO = new ClienteEventualVO();
			clienteVO.setNombre(cliente.getNombre());
			clienteVO.setDocumento(cliente.getDocumento());
			clienteVO.setDomicilio(ManagementDomicilio.getInstancia().EntitieAVO(cliente.getDomicilio()));
			clienteVO.setTelefonoContacto(cliente.getTelefonoContacto());
			return clienteVO;	
			
		}else{
		
			ClienteRegularVO clienteVO = new ClienteRegularVO();
			clienteVO.setNombre(cliente.getNombre());
			clienteVO.setDocumento(cliente.getDocumento());
			clienteVO.setDomicilio(ManagementDomicilio.getInstancia().EntitieAVO(cliente.getDomicilio()));
			clienteVO.setTelefonoContacto(cliente.getTelefonoContacto());
			return clienteVO;
			
		}	
		
		
	}
	
	public Cliente VOAEntitie(ClienteVO cliente){
		
		if (cliente.getClass().getName().equals("ClienteEventual")){
		
		ClienteEventual cli = new ClienteEventual();
		cli.setNombre(cliente.getNombre());
		cli.setDocumento(cliente.getDocumento());
		cli.setDomicilio(ManagementDomicilio.getInstancia().VOAEntitie(cliente.getDomicilio()));
		cli.setTelefonoContacto(cliente.getTelefonoContacto());
		return cli;
		
		}else{
			
		ClienteRegular cli = new ClienteRegular();
		cli.setNombre(cliente.getNombre());
		cli.setDocumento(cliente.getDocumento());
		cli.setDomicilio(ManagementDomicilio.getInstancia().VOAEntitie(cliente.getDomicilio()));
		cli.setTelefonoContacto(cliente.getTelefonoContacto());
		return cli;
					
		}
	
	}

	public void guardarCliente(String tipo,String nombre,String documento,String telefonocontacto,DomicilioVO domicilio) {
		
		System.out.println("Voy a persistir en magement!!!!");
		
		if (tipo.equals("ClienteEventual")){
		
		ClienteEventual cliente = new ClienteEventual();
		ClienteDAO miClienteDAO = new ClienteDAO();
		
		cliente.setNombre(nombre);
		cliente.setDocumento(documento);
		cliente.setTelefonoContacto(telefonocontacto);
		cliente.setDomicilio(ManagementDomicilio.getInstancia().VOAEntitie(domicilio));
		miClienteDAO.altaCliente(cliente);
		
		
		}else{
			
		ClienteRegular cliente = new ClienteRegular();
		ClienteDAO miClienteDAO = new ClienteDAO();
		cliente.setNombre(nombre);
		cliente.setDocumento(documento);
		cliente.setTelefonoContacto(telefonocontacto);
		cliente.setDomicilio(ManagementDomicilio.getInstancia().VOAEntitie(domicilio));
		miClienteDAO.altaCliente(cliente);
			
		
			
		}
		
	}
	
	
	public void modificarCliente(int id,String tipo,String nombre,String documento,String telefonocontacto,DomicilioVO domicilio) {
		if (tipo.equals("ClienteEventual")){
			
			ClienteEventual cliente = new ClienteEventual();
			ClienteDAO miClienteDAO = new ClienteDAO();
			cliente.setId(id);
			cliente.setNombre(nombre);
			System.out.println(nombre);
			cliente.setDocumento(documento);
			cliente.setTelefonoContacto(telefonocontacto);
			cliente.setDomicilio(ManagementDomicilio.getInstancia().VOAEntitie(domicilio));
			miClienteDAO.actualizarCliente(cliente);
			
			
			}else{
				
			ClienteRegular cliente = new ClienteRegular();
			ClienteDAO miClienteDAO = new ClienteDAO();
			cliente.setId(id);
			cliente.setNombre(nombre);
			cliente.setDocumento(documento);
			cliente.setTelefonoContacto(telefonocontacto);
			cliente.setDomicilio(ManagementDomicilio.getInstancia().VOAEntitie(domicilio));
			miClienteDAO.actualizarCliente(cliente);
				
			
				
			}
	}

	public void bajaCliente(int id) {
		ClienteDAO miClienteDAO = new ClienteDAO();
		miClienteDAO.bajaCliente(id);
	}

	public List<ClienteVO> dameClientes() {
		try {
			ClienteDAO miCliente = new ClienteDAO();
			List<Cliente> clientes = miCliente.getClientes();
			List<ClienteVO> clientesVO = new ArrayList<ClienteVO>();
			for (int i=0;i<clientes.size();i++)
			{
				ClienteVO c = this.clienteEntitieAVO(clientes.get(i));
				clientesVO.add(c);
			}
			return clientesVO;
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public ClienteVO dameCliente(String doc) {
		try {
			ClienteDAO miCliente = new ClienteDAO();
			Cliente ch = miCliente.getCliente(doc);
			if (ch==null)
				return null;
			ClienteVO c = this.clienteEntitieAVO(ch);
			return c;
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}
